package cj.web.admin.controllers;

import java.io.File;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import net.paoding.rose.web.annotation.Param;
import net.paoding.rose.web.annotation.Path;
import net.paoding.rose.web.annotation.rest.Get;
import net.paoding.rose.web.annotation.rest.Post;
import net.paoding.rose.web.var.Model;
import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;

import cj.utils.Constants;
import cj.utils.DateUtils;
import cj.utils.ImageUtils;
import cj.utils.ReadConfigProperties;
import cj.utils.ReturnUUID;
import cj.web.admin.constants.MatrixTypeEnum;
import cj.web.admin.constants.MemuEnum;
import cj.web.admin.constants.NewsCategoryEnum;
import cj.web.admin.dao.NewMediaMatrixDAO;
import cj.web.admin.domain.NewMediaMatrix;
import cj.web.login.controllers.BaseController;

@Path("/newMediaMatrix")
public class NewMediaMatrixController extends BaseController {

	private static Logger logger = Logger.getLogger(NewMediaMatrixController.class.getName());

	@Autowired
	private NewMediaMatrixDAO newMediaMatrixDao;

	@Get("query")
	public String query(Model model, NewMediaMatrix newMediaMatrix) {
		newMediaMatrixDao.query(newMediaMatrix);
		return null;
	}

	@Get("queryById")
	public String queryById(Model model, @Param("id") int id) {
		newMediaMatrixDao.queryById(id);
		return null;
	}

	@Get("show")
	public String show(Model model, NewMediaMatrix newMediaMatrix,@Param("type")String type) {
		// EnumSet的使用
		EnumSet<MatrixTypeEnum> typeEnum = EnumSet.allOf(MatrixTypeEnum.class);
		EnumSet<NewsCategoryEnum> categoryEnum = EnumSet.allOf(NewsCategoryEnum.class);
		model.add("typeEnum", typeEnum);
		model.add("categoryEnum", categoryEnum);
		
		model.add("type",type);
		//MemuEnum
        model.add("MemuEnum",retMemuValue(type));
		return "/views/portal/newMediaMatrixList.vm";
	}

	@Post("getList")
	public String getList(NewMediaMatrix newMediaMatrix) {
		JSONObject jo = new JSONObject();

		List<NewMediaMatrix> objs = newMediaMatrixDao.getList(newMediaMatrix);

		int size = newMediaMatrixDao.getSize(newMediaMatrix);

		jo.put("data", objs);
		jo.put("draw", newMediaMatrix.getDraw());
		jo.put("recordsTotal", size);
		jo.put("recordsFiltered", size);
		return "@" + jo.toString();
	}

	@Get("createPage")
	public String createPage(Model model,@Param("type")String type) {
		// EnumSet的使用
		EnumSet<MatrixTypeEnum> typeEnum = EnumSet.allOf(MatrixTypeEnum.class);
		EnumSet<NewsCategoryEnum> categoryEnum = EnumSet.allOf(NewsCategoryEnum.class);
		model.add("typeEnum", typeEnum);
		model.add("categoryEnum", categoryEnum);
		
		model.add("type",type);
		//MemuEnum
        model.add("MemuEnum",retMemuValue(type));
		return "/views/portal/newMediaMatrixDetail.vm";
	}

	@Post("create")
	public String create(Model model, NewMediaMatrix newMediaMatrix, HttpServletRequest request) {
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);
		try {
			newMediaMatrix.setDeleteFlag(Constants.deleteFlag.deleteFlag_1);
			newMediaMatrix.setCreateAT(DateUtils.getNowTime());
			newMediaMatrix.setCreateUser(returnSessionObj(request).getAccount());
			newMediaMatrix.setUpdateAT(DateUtils.getNowTime());
			newMediaMatrix.setUpdateUser(returnSessionObj(request).getAccount());
			newMediaMatrixDao.create(newMediaMatrix);
		} catch (Exception e) {
			jo.put("returnFlag", Constants.returnObj.returnFlag_flase);
		}

		return "@" + jo.toString();
	}

	@Get("edit")
	public String edit(Model model, @Param("id") int id) {
		NewMediaMatrix obj = newMediaMatrixDao.queryById(id);
		model.add("newMediaMatrix", obj);
		// EnumSet的使用
		EnumSet<MatrixTypeEnum> typeEnum = EnumSet.allOf(MatrixTypeEnum.class);
		EnumSet<NewsCategoryEnum> categoryEnum = EnumSet.allOf(NewsCategoryEnum.class);
		model.add("typeEnum", typeEnum);
		model.add("categoryEnum", categoryEnum);
		//MemuEnum
        model.add("MemuEnum",retMemuValue(obj.getCategory()));
		return "/views/portal/newMediaMatrixEdit.vm";
	}

	@Post("update")
	public String update(Model model, NewMediaMatrix newMediaMatrix, HttpServletRequest request) {
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);

		try {
			newMediaMatrix.setUpdateAT(DateUtils.getNowTime());
			newMediaMatrix.setUpdateUser(returnSessionObj(request).getAccount());
			newMediaMatrixDao.update(newMediaMatrix);
		} catch (Exception e) {
			jo.put("returnFlag", Constants.returnObj.returnFlag_flase);
		}

		return "@" + jo.toString();
	}

	@Get("deleteById")
	public String deleteById(Model model, @Param("id") int id) {
		NewMediaMatrix obj = newMediaMatrixDao.queryById(id);
		
		if(obj != null){
			newMediaMatrixDao.deleteById(id);
		}		
		return "r:show?type=" + obj.getMatrixType();
	}
	
	@Post("doUpload")
    public String doUpload(@Param("uploadimage") MultipartFile file,HttpServletRequest request) {
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);

		// 判断文件是否为空  
        if (file != null && !file.isEmpty()) {  
            try {  
                // 文件保存路径  
            	String path = ReadConfigProperties.getValue("uploadFilePath");
            	//判断文件是否存在，不存在创建文件
            	Map rep = ReturnUUID.getFolder(path);
            	path = rep.get("allpath").toString();//所在的全路径
            	//文件名
                String fileName =  ReturnUUID.getName(file.getOriginalFilename()); 
                // 转存文件  
                file.transferTo(new File(path+"/"+fileName));  
                
                jo.put("filePath", rep.get("filepath")+"/"+fileName);
                
                ImageUtils.scale2(path+"/"+fileName, path+"/s_"+fileName, 162, 243, true);//缩率图
                
            } catch (Exception e) {  
                e.printStackTrace();  
                jo.put("returnFlag", Constants.returnObj.returnFlag_flase);
            }  
        }
		
		return "@"+jo.toString();
    }
	
	@Post("doqrUpload")
    public String doqrUpload(@Param("uploadqrimage") MultipartFile file,HttpServletRequest request) {
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);
		
		// 判断文件是否为空  
        if (file != null && !file.isEmpty()) {  
            try {  
                // 文件保存路径  
            	String path = ReadConfigProperties.getValue("uploadFilePath");
            	//判断文件是否存在，不存在创建文件
            	Map rep = ReturnUUID.getFolder(path);
            	path = rep.get("allpath").toString();//所在的全路径
            	//文件名
                String fileName =  ReturnUUID.getName(file.getOriginalFilename()); 
                // 转存文件  
                file.transferTo(new File(path+"/"+fileName));  
                
                jo.put("filePath", rep.get("filepath")+"/"+fileName);
                
                ImageUtils.scale2(path+"/"+fileName, path+"/s_"+fileName, 162, 243, true);//缩率图
                
            } catch (Exception e) {  
                e.printStackTrace();  
                jo.put("returnFlag", Constants.returnObj.returnFlag_flase);
            }  
        }
		
		return "@"+jo.toString();
    }
	
	@Post("iosqrUpload")
    public String iosqrUpload(@Param("iosqrimage") MultipartFile file,HttpServletRequest request) {
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);
		
		// 判断文件是否为空  
        if (file != null && !file.isEmpty()) {  
            try {  
                // 文件保存路径  
            	String path = ReadConfigProperties.getValue("uploadFilePath");
            	//判断文件是否存在，不存在创建文件
            	Map rep = ReturnUUID.getFolder(path);
            	path = rep.get("allpath").toString();//所在的全路径
            	//文件名
                String fileName =  ReturnUUID.getName(file.getOriginalFilename()); 
                // 转存文件  
                file.transferTo(new File(path+"/"+fileName));  
                
                jo.put("filePath", rep.get("filepath")+"/"+fileName);
                
                ImageUtils.scale2(path+"/"+fileName, path+"/s_"+fileName, 162, 243, true);//缩率图
                
            } catch (Exception e) {  
                e.printStackTrace();  
                jo.put("returnFlag", Constants.returnObj.returnFlag_flase);
            }  
        }
		
		return "@"+jo.toString();
    }
	
	@Get("fileDelete")
    public String fileDelete(@Param("key") String key) {
		JSONObject jo = new JSONObject();
		jo.put("key", key);
		jo.put("id", key);
		return "@"+jo.toString();
	}
	
	/**
	 * 返回菜单
	 * @param category
	 * @return
	 */
	private MemuEnum retMemuValue(String type)
	{
		
		if(type.equals("0"))
		{
			return MemuEnum.wz;
		}
		if(type.equals("1"))
		{
			return MemuEnum.wbh;
		}
		if(type.equals("2"))
		{
			return MemuEnum.wxh;
		}
		if(type.equals("3"))
		{
			return MemuEnum.app;
		}
		
		return null;
	}
}
